package com.frejoys.service;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.frejoys.common.dto.admin.*;
import com.frejoys.common.dto.app.CodeDto;
import com.frejoys.common.dto.admin.StoreCodeIdDto;
import com.frejoys.common.dto.app.StoreCodeDto;
import com.frejoys.common.vo.admin.StoreCodeListVo;
import com.frejoys.common.vo.app.StoreIdAndTypeVo;
import com.frejoys.common.vo.store.StoreCodeVo;
import com.frejoys.dao.entity.StoreCode;

import java.util.List;

public interface StoreCodeService extends IService<StoreCode> {

    default StoreCode getOnly(QueryWrapper<StoreCode> wrapper) {
        wrapper.last("limit 1");
        return this.getOne(wrapper);
    }

    default StoreCode getOnly(LambdaQueryWrapper<StoreCode> wrapper) {
        wrapper.last("limit 1");
        return this.getOne(wrapper);
    }

    // 更新二维码
    boolean upPayCode(Integer storeId, Integer type, String payCode);

    /**
     * 根据店铺id获取店铺支付码
     */
    List<StoreCodeVo> listCode(Integer storeId);

    /**
     * 根据店铺id获取线上码
     */
    List<StoreCode> getOnlineCode();

    /**
     * 根据店铺id获取店铺线上支付码
     */
    String getOnlineCode(Integer storeId);

    /**
     * 新增店铺支付码
     *
     * @param storeId 店铺id
     * @param code  支付码
     * @param payCode 支付二维码
     * @param type 类型：1.线上码，2.线下码
     */
    boolean addStoreCode(Integer storeId, Long code, String payCode, Integer type);

    //删除店铺支付码
    Integer deleteStoreCode(StoreCodeIdDto dto);

    /**
     * 新增店铺支付码
     *
     * @param storeId 店铺id
     * @param storeCodeDepositoryId  支付码库id
     * @param
     * @param type 类型：1.线上码，2.线下码
     */
    boolean addStoreCodeInfo(Integer storeId,Integer storeCodeDepositoryId, Integer type);

    //根据支付码查询店铺id
    Integer storeIdInfo(CodeDto dto);

    //根据支付码获取店铺id和类型
    StoreIdAndTypeVo storeIdAndType(StoreCodeDto dto);

    //根据支付码code获取店铺id
    Integer getStoreId(Long code);


    // 根据店铺id获取店铺code
    Long getCode(Integer storeId, Integer type);

    //换绑店铺支付码
    boolean upStoreCode(Integer storeId, Integer storeCodeDepositoryId, Integer value);

    //店铺支付码列表
    IPage<StoreCodeListVo> storeAndCodeListInfo(StoreCodeListDto dto);
}
